#include<bits/stdc++.h>
using namespace std;
class CSet
{
private:
    int n;
    int* data;
public:
    CSet(int _n)
    {
        n=_n;
        data=new int[n];
        for(int i=0;i<n;++i)
        {
            data[i]=0;
        }
    }
    void ReadNum()
    {
        for(int i=0;i<n;++i)
        {
            cin>>data[i];
        }
    }
    CSet(const CSet& tmp)
    {
        n=tmp.n;
        data=new int[n];
        for(int i=0;i<n;++i)
        {
            data[i]=tmp.data[i];
        }
    }
    friend ostream& operator<<(ostream& os,const CSet& a);
    CSet operator+(const CSet& a)
    {
        CSet ans(n+a.n);
        ans.n=0;
        int i=0;
        for(int k=0;k<n;++k)
        {
            int flag=1;
            for(int j=0;j<ans.n;++j)
            {
                if(data[k]==ans.data[j])
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                ans.data[i]=data[k];
                ++i;
                ++ans.n;
            }
        }
        for(int k=0;k<a.n;++k)
        {
            int flag=1;
            for(int j=0;j<ans.n;++j)
            {
                if(a.data[k]==ans.data[j])
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                ans.data[i]=a.data[k];
                ++i;
                ++ans.n;
            }
        }
        return ans;
    }
    CSet operator-(const CSet& a)
    {
        CSet ans(n);
        ans.n=0;//记录下实际元素个数
        int index=0;
        for(int i=0;i<n;++i)
        {
            int flag=1;
            for(int j=0;j<a.n;++j)
            {
                if(data[i]==a.data[j])
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
            {
                ans.data[index]=data[i];
                index++;
                ans.n++;
            }
        }
        return ans;
    }
    CSet operator*(const CSet& a)
    {
        CSet ans(n);
        ans.n=0;
        int index=0;
        for(int i=0;i<n;++i)
        {
            int flag=0;
            for(int j=0;j<a.n;++j)
            {
                if(data[i]==a.data[j])
                {
                    flag=1;
                    break;
                }
            }
            if(flag)
            {
                ans.data[index]=data[i];
                index++;
                ans.n++;
            }
        }
        return ans;
    }
    ~CSet()
    {
        delete[] data;
    }
};
ostream& operator<<(ostream& os,const CSet& a)
{
    for(int i=0;i<a.n;++i)
    {
        if(i!=0)
            os<<" ";
        os<<a.data[i];
    }
    os<<endl;
    return os;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n1,n2;
        cin>>n1;
        CSet s1(n1);
        s1.ReadNum();
        cin>>n2;
        CSet s2(n2);
        s2.ReadNum();
        cout<<"A:"<<s1;
        cout<<"B:"<<s2;
        cout<<"A+B:"<<s1+s2;
        cout<<"A*B:"<<s1*s2;
        cout<<"(A-B)+(B-A):"<<(s1-s2)+(s2-s1);
        if(t!=0)
            cout<<endl;
    }
}